#ifndef _TANK_ENTITY_H_
#define _TANK_ENTITY_H_

#include "TankData.h"
#include "AbstractEntity.h"
#include "GunParameters.h"
#include "BulletContainer.h"
#include "EffectManager.h"
#include "GameDeviceSingleton.h"

class TankEntity : public AbstractEntity
{
private:
	TankData* _data;
	BulletContainer* _bulletContainer;
	double startx;
	int life;
	int spriteDup;
public:
	//************************************
	// Method:    TankEntity
	// FullName:  TankEntity::TankEntity
	// Access:    public 
	// Returns:   
	// Qualifier:
	// Parameter: int id
	// Parameter: int type
	// Parameter: double x
	// Parameter: double y
	// Parameter: Rect * targetRect
	//************************************
	TankEntity(int id, int type, double x, double y, Rect* targetRect);

	//************************************
	// Method:    update
	// FullName:  TankEntity::update
	// Access:    virtual public 
	// Returns:   void
	// Qualifier:
	// Parameter: long time
	//************************************
	virtual void update(long time);

	//************************************
	// Method:    updateState
	// FullName:  TankEntity::updateState
	// Access:    virtual public 
	// Returns:   void
	// Qualifier:
	//************************************
	virtual void updateState();

	//************************************
	// Method:    checkMoveState
	// FullName:  TankEntity::checkMoveState
	// Access:    virtual public 
	// Returns:   void
	// Qualifier:
	//************************************
	virtual void checkMoveState();

	//************************************
	// Method:    checkFireState
	// FullName:  TankEntity::checkFireState
	// Access:    virtual public 
	// Returns:   void
	// Qualifier:
	//************************************
	virtual void checkFireState();

	//************************************
	// Method:    draw
	// FullName:  TankEntity::draw
	// Access:    virtual public 
	// Returns:   void
	// Qualifier:
	// Parameter: long time
	//************************************
	virtual void draw(long time);

	//************************************
	// Method:    updatePhysics
	// FullName:  TankEntity::updatePhysics
	// Access:    virtual public 
	// Returns:   void
	// Qualifier:
	//************************************
	virtual void updatePhysics();

	//************************************
	// Method:    updateData
	// FullName:  TankEntity::updateData
	// Access:    virtual public 
	// Returns:   void
	// Qualifier:
	// Parameter: int action
	// Parameter: int actiondata
	//************************************
	virtual void updateData(int action, int actiondata);

	//************************************
	// Method:    getAbstractData
	// FullName:  TankEntity::getAbstractData
	// Access:    virtual public 
	// Returns:   AbstractData*
	// Qualifier:
	//************************************
	virtual AbstractData* getAbstractData();

	//************************************
	// Method:    ~TankEntity
	// FullName:  TankEntity::~TankEntity
	// Access:    public 
	// Returns:   
	// Qualifier:
	//************************************
	~TankEntity();

};

#endif